<!DOCTYPE html>

<head>
	<title>eventsCalendar2 для MODx 1.0.4</title>
</head>


<style type='text/css'>
	body {font: normal 14px Arial;}
	body a {color: #0047ab; text-decoration: none;}
	body a:hover {color: red; text-decoration: underline;}
	.main {width: 800px; margin: auto;}
	.main li {margin: 10px 0;}
	.code, .param {margin-left: 20px; padding: 5px; background: #efefef; font: normal 0.9em Arial;border:1px solid #AAA;}
	h3 {display: block; border-bottom: 1px solid #AAA; width: 80%; margin-top: 30px;}
	
	.param strong {font-size: 1em;}
</style>

<body>
	<div class='main'>
	
		<a name='top'></a>
		
		<h1>eventsCalendar2 для MODx Evolution 1.0.4</h1>
		
		<a href='#description'>&bull;&nbsp;Описание</a><br/><br/>
		<a href='#install'>&bull;&nbsp;Установка</a><br/><br/>
		<a href='#changelist'>&bull;&nbsp;Версии</a><br/><br/>
		<a href='#settings'>&bull;&nbsp;Параметры</a><br/><br/>
		<a href='#placeholders'>&bull;&nbsp;Плейсхолдеры</a><br/><br/>
		<a href='#use'>&bull;&nbsp;Использование</a><br/><br/>
	
	
	
		<a name='description'></a>
		<h3>Описание</h3>
		<p>Сниппет принимает в качестве параметра id существующего ресурса-контейнера MODx, выбирает из него все документы с указанным TV параметром,
		генерирует календарь и выводит на нем эти документы по датам всплывающими подсказками. Оформление календаря и подсказок задается отдельными
		чанками и css классами.
		</p>
		<p>
		Хорошо подходит для генерации архива новостей или планируемых мероприятий.
		</p>
		<p>
		<strong>Комплектация</strong>
		<li>Сниппет <i>eventsCalendar2</i> для генерации календаря на стороне сервера</li>
		<li>Чанк <i>tplCalendar2</i> с полным оформлением календаря</li>
		<li>Чанк <i>tplEvent2</i> с оформлением одного события</li>
		<li><i>readme.html</i> - вы его сейчас читаете</li>
		</p>

				
		<a name='install'></a>
		<h3>Установка</h3>
		<p>
		<li>Качаете архив.</li>
		<li>Распаковываете.</li>
		<li>Создаете сниппет eventsCalendar2, копируете в него содержимое eventsCalendar.snippet2.php, сохраняете.</li>
		<li>Создаете чанк tplCalendar2, копируете в него содержимое eventsCalendar.tplCalendar2.html, сохраняете.</li>
		<li>Создаете чанк tplEvent2 копируете в него содержимое eventsCalendar.tplEvent2.html, сохраняете.</li>
		<li>Создаете новый ресурс.</li>
		<li>В шаблоне сайта уже должен быть подключен jquery. Если нет, подключаете так:
			<div class='code'>&lt;script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js'&gt;&lt;/script&gt;</div>
		</li>
		<li>Вызываете на странице сниппет:
			<div class='code'>
				[!eventsCalendar2?<br/>
				&nbsp;&nbsp;&nbsp;&nbsp;&id=`id ресурса-контейнера с событиями`<br/>
				&nbsp;&nbsp;&nbsp;&nbsp;&dateTV=`event_date`<br/>
				&nbsp;&nbsp;&nbsp;&nbsp;&dateFormat=`%d %b %Y %H:%M`<br/>
				&nbsp;&nbsp;&nbsp;&nbsp;&tplEvent=`tplEvent2`<br/>
				&nbsp;&nbsp;&nbsp;&nbsp;&tplMain=`tplCalendar2`<br/>
				&nbsp;&nbsp;&nbsp;&nbsp;&lang=`ru`<br/>
				&nbsp;&nbsp;&nbsp;&nbsp;&first_day=`1`<br/>
				!]				
			</div>
		</li>
		<li>Календарь должен отобразится и ругнуться на то, что в указанном ресурсе нет документов.</li>
		<li>Теперь создаете TV параметр, называете его event_date, ставите ему тип date, и назначаете его шаблону, который используется ресурсами, находящимися в контейнере, чей id вы указали при вызове.</li>
		<li>Нужно пройтись по этим ресурсам и выставить дату для отображения в TV параметре.</li>
		<li>Проверяете календарь — все должно работать.</li>
		<a href='#top'>&uarr;</a>
		</p>
	
	<a name='changelist'></a>
	<h3>Версии</h3>
		<h4>Версия 2.0.3</h4>
		<li>События теперь выбираются только для нужного месяца, что <b>существеннно</b> снижает нагрузку на систему.
			<br/>
			При переключении месяца в календаре - события выбираются заново через ajax.
			<br />Выборка и отрисовка 5 событий за месяц со всем содержимом и ТВ параметрами на обычном виртуальном хостинге:
			<br/><i>&nbsp;&nbsp;&nbsp;Mysql: 0.0324 s (15 queries)
			<br/>&nbsp;&nbsp;&nbsp;PHP: 0.0257 s
			<br/>&nbsp;&nbsp;&nbsp;Total: 0.0581 s
			<br/>&nbsp;&nbsp;&nbsp;Source: database</i>
		</li>
		<li>Добавлена возможность использовать в шаблонах любые TV параметры и <a href='http://rtfm.modx.com//display/MODx096/Document+Object'>свойства ресурсов</a></li>
		<li>Добавлен параметр сдвига времени в часах <b>&time_shift</b>, для тех сайтов, где временная зона не совпадает с хостингом.
			<br/><i>&nbsp;&nbsp;&nbsp;Пример: сайт хостится в Москве, его TZ +3, а сайт обслуживает Новосибирск, его TZ +6.
			<br/>&nbsp;&nbsp;&nbsp;Чтобы правильно указывался текущий день на календаре, нужно добавить при вызове параметр <b>&time_shift=`3`</b></i>
		</li>
		<li>Дефолтные настройки установлены для России. Неделя начитается в понедельник, язык русский.</li>
		<li>Изменен чанк <b>tplEvent2</b>, в соответствии с новыми плейсхолдерами.</li>
		
	
		<h4>Версия 2.0.2</h4>
		<li>Генерируемый код приведен в соответствие со стандартами W3C и проходит валидатор.</li>
		<li>Добавлен readme.html в архив со сниппетом.</li>
		
		<h4>Версия 2.0.1</h4>
		<li>Добавлена мультиязычность, пока есть английский и русский языки.</li>
		<li>Исправлены мелкие ошибки.</li>
		<li>Добавлены новые параметры  &lang, &first_day, &show_errors. Описание в разделе <a href='#settings'>параметров</a>.</li>
		
		<h4>Версия 2.0.0</h4>
		<li>Первый релиз. Старый календарь с отрисовкой на jqueryui.datepicker и всплывающими окнами на jquery.qtip был застрелен,
		чтобы не мучался своими багами.</li>
		
		<a href='#top'>&uarr;</a>
		
		<a name='settings'></a>
		<h3>Параметры сниппета</h3>
		<div class='param'>
			<strong>&id</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: нет, но обязателен
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [int]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: id существующего документа-контейнера MODx для выборки событий
			<br/>
			<strong>&month</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: date('m')
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [int]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Месяц для показа событий
			<br/>
			<strong>&year</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: date('Y')
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [int]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Год для показа событий
			<br/>
			<strong>&dateTV</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: event_date
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Имя существующего TV параметра для определения даты события
			<br/>
			<strong>&dateFormat</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: '%d %b %Y %H:%M'
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Формат даты, используется strftime()
			<br/>
			<strong>&tplEvent</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: tplEvent
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Имя существующего чанка MODx
			<br/>
			<strong>&tplMain</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: tplCalendar
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Имя существующего чанка MODx
			<br/>
			<strong>&calendar_id</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: Calendar
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Имя уникального идентификатора экземпляра календаря. Необходимо, если вызывается более одного календаря на странице
			<br/>
			<strong>&class_calendar</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: calendar
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Имя css класса для оформления таблицы календаря
			<br/>
			<strong>&class_dow</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: dow
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Имя css класса для оформления дней недели
			<br/>
			<strong>&class_month</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: month
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Имя css класса для оформления месяца и года
			<br/>
			<strong>&class_workday</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: workday
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Имя css класса для оформления рабочих дней
			<br/>
			<strong>&class_weekend</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: weekend
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Имя css класса для оформления выходных
			<br/>
			<strong>&class_today</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: today
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Имя css класса для оформления сегодня
			<br/>
			<strong>&class_event</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: event
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Имя css класса для оформления div с событием
			<br/>
			<strong>&class_isevent</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: isevent
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Имя css класса для оформления ячейки таблицы с событием
			<br/>
			<strong>&class_noevent</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: noevent
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Имя css класса для оформления ячейки таблицы без события
			<br/>
			<strong>&class_date</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: date
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Имя css класса для оформления даты календаря
			<br/>
			<strong>&class_emptyday</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: emptyday
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Имя css класса для оформления пустой ячейки, без даты
			<br/>
			<strong>&class_prev</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: prev
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Имя css класса для оформления кнопки перехода на предыдущий месяц
			<br/>
			<strong>&class_next</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: next
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Имя css класса для оформления кнопки перехода на следующий месяц
			<br/>
			<strong>&dow_names</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: Зависит от &lang
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Строка с сокращенными названиями дней недели, через запятую, без пробелов. Переопределит стандартную, для выбранного языка. 
			<br/>
			<strong>&month_names</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: Зависит от &lang
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Строка с названиями месяцев, через запятую, без пробелов. Переопределит стандартную, для выбранного языка.
			<br/>
			<strong>&btn_prev</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: '«'
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Текст кнопки перехода на предыдущий месяц
			<br/>
			<strong>&btn_next</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: '»'
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [string]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Текст кнопки перехода на следующий месяц
			<br/>
			<strong>&lang</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: 'en'
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [en,ru]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Язык для оформления календаря и вывода ошибок
			<br/>
			<strong>&show_errors</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: 1
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [0|1]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Показывать ошибки, по умолчанию - да
			<br/>
			<strong>&first_day</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: 0
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [0|1]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: 0 - первый день - воскресенье. 1 - первый день - понедельник.
			<br/>
			<strong>&time_shift</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;по умолчанию: 0
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;значение: [int]
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;описание: Сдвиг в часах от времени сервера. Значение может быть и положительным и отрицательным.
			<br/>			
		</div>
		<a href='#top'>&uarr;</a>
		
		<a name='placeholders'></a>
		<h3>Плейсхолдеры чанков</h3>
		<p>В сниппете используются служебные плейсхолдеры с именами классов css для оформления календаря, менять их можно через параметры, 
		которые описаны выше. Напрямую в чанке календаря эти холдеры трогать не нужно, но можно.</p>
		<div class='param'>
			<strong>[+ec.Calendar+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;Экземпляр календаря, то есть таблица с датами
			<br/>
			<strong>[+ec.calendar_id+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;Уникальный идентификатор экземпляра календаря
			<br/>
			<strong>[+ec.class_calendar+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;css класс таблицы с календарем
			<br/>
			<strong>[+ec.class_dow+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;css класс дней недели
			<br/>
			<strong>[+ec.class_month+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;css класс месяца и года
			<br/>
			<strong>[+ec.class_workday+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;css класс рабочих дней
			<br/>
			<strong>[+ec.class_weekend+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;css класс выходных
			<br/>
			<strong>[+ec.class_today+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;css класс сегодня
			<br/>
			<strong>[+ec.class_event+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;css класс события
			<br/>
			<strong>[+ec.class_isevent+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;css класс ячейки с событием
			<br/>
			<strong>[+ec.class_noevent+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;css класс ячейки без события
			<br/>
			<strong>[+ec.class_date+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;css класс даты
			<br/>
			<strong>[+ec.class_emptyday+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;css класс пустой ячейки
			<br/>
			<strong>[+ec.class_prev+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;css класс кнопки предыдущего месяца
			<br/>
			<strong>[+ec.class_next+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;css класс  кнопки следующего месяца		
		</div>
		<p>А также есть плейсходеры, для подстановки значений событий в чанке всплывающего окна, их можно менять как угодно.</p>
		<div class='param'>
			<strong>[+ec.num+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;Номер события в дне. Актуально, только если у вас больше одного события в день. Для правильной нумерации необходимо, чтобы параметр даты публикации документа совпадал с TV параметром даты события. Иначе, нумерация может быть неверной.
			<br/>
			<strong>[+ec.url+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;Ссылка на событие.
			<br/>
			<strong>[+ec.date+]</strong>
			<br/>&nbsp;&nbsp;&nbsp;&nbsp;Дата в заданном формате.
			<br/>			
			<br/>
			<strong><big>
			А также с версии 2.0.3 доступны ВСЕ <a href='http://rtfm.modx.com//display/MODx096/Document+Object'>свойства ресурсов</a> и ТВ параметры.</big></strong>
			<br />
			Имена плейсхолдеров начинаются на "[+ec.".
			<br />То есть: [+ec.id+],[+ec.pagetitle+],[+ec.longtitle+],[+ec.description+] и так далее.
			
			
		</div>	
		<a href='#top'>&uarr;</a>
		
		<a name='use'></a>
		<h3>Использование</h3>
		<p>
		Использовать данный сниппет можно как вашей душе угодно, но лучше, все таки, по назначению.
		</p>
		<p>
		Автором являюсь я, Василий Наумкин. Если вы где то будете выкладывать мой сниппет, сделайте пожалуйста ссылку на меня и мою
		домашнюю страницу <a href='http://webstartpage.ru'>http://webstartpage.ru</a>.
		</p>
		<p>
		Поблагодарить меня за проделанную работу можно тремя вариантами:
		<li>Использовать этот сниппет у себя в проекте.</li>
		<li>Написать мне приятное электрическое письмо <a href='bezumkin@yandex.ru'>bezumkin@yandex.ru</a>.</li>
		<li>Прислать благодарность электронными деньгами на WM кошелек R100477009970.</li>
		</p>
		
		<a href='#top'>&uarr;</a>
		
		
	</div>	
</body>
